﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;

namespace PSE.Framework.Process
{
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single)]
    public class ProcessService : IProcessService
    {
        /// <summary>
        /// Método utilizado pelo processo filho após ser inicializado, para liberar o 
        /// processo pai para continuar a execução.
        /// <param name="childName">Nome do processo filho</param>
        /// </summary>
        public void ReleaseParent(string childName)
        {
            this.OnParentReleased(new ProcessNameEventArgs(childName));
        }

        /// <summary>
        /// Evento utilizado pelo processo pai para saber que o processo filho foi inicializado.
        /// </summary>
        public event EventHandler<ProcessNameEventArgs> ParentReleased;

        protected virtual void OnParentReleased(ProcessNameEventArgs e)
        {
            if (ParentReleased != null)
                ParentReleased(this, e);
        }

        /// <summary>
        /// Método utilizado pelo processo pai para fechar o processo filho.
        /// </summary>
        public void CloseChild()
        {
            this.OnChildClosed(new EventArgs());
        }

        /// <summary>
        /// Evento utilizado pelo processo filho para finalizar sua execução.
        /// </summary>
        public event EventHandler ChildClosed;

        protected virtual void OnChildClosed(EventArgs e)
        {
            if (ChildClosed != null)
                ChildClosed(this, e);
        }
    }
}
